我想在Haskell找出一些默认的运算符优先,但我无法找到一些好的文档->
,=
并(在
f x
)。于是,我就:i (->)
和:i (=)
在GHCI得到一些信息,但它给了我一个语法错误。
显然,这些“令牌”只是语法的内置部分,因此:i
也就不足为奇了。
我是Haskell的新手,所以我不知道这个事实,=
它不会返回任何值,我只是错误地认为,它在命令式语言中的行为等同于它,这当然是错误的。
->
并且,在另一方面,表现为经营者。它们分别返回类型/值和右/左关联。与实际操作员一起使用时,它们具有某种性能。
->
是类型级别的运算符((->) :: * -> * -> *
),如注释中所述,:i (->)
表明它是infixr 0
*。
功能应用可以视为具有“无限高”左优先,也就是说,如果%
是任何运营商,那么f x % y
将永远被理解为(f x) % y
不管是什么优先级%
了,而且f x y z
总是读为((f x) y) z
**这是不记录为有优先级,因为它不是运算符,并且无法在Haskell中声明“无限”优先级。
=
不能将其视为具有优越性,因为它始终是声明而不是表达式,因此在其周围加上括号是荒谬的。它不是运算符,因此不能具有优先级。
*如以下注释中所指出的那样,实际上它的行为就好像具有优先级infixr -1
,但这在普通运算符中是不允许的-这是语法而不是语义。
**请注意,这是与的“对立” ->
,可以看作具有“无限低”的正确优先级。你知道为什么这是自然的吗?